#ifndef FEEDMANAGER_H
#define FEEDMANAGER_H

#include "Archivo.h"
#include "RegistroFijoFeedIndex.h"
#include "RegistroVariableFeedData.h"
#include "RegistroFijoFeedDataVariable.h"
#include "Feed.h"
#include <list>

class FeedItemConsulta
{
        private:
                int posicionGlobal;
                string URL;
		TCId id;
                TCTimeStamp date;
        public:
                FeedItemConsulta();
                virtual ~FeedItemConsulta();

		TCId getId();
                string getURL();
                int getPosicionGlobal();
                TCTimeStamp getDate();

		void setId(TCId id);
                void setURL(string URL);
                void setPosicionGlobal(int posicionGlobal);
                void setDate(TCTimeStamp value);
};


typedef list<FeedItemConsulta> ListaConsultaFeed;


class FeedManager
{
        private:
                Archivo archivoDatosFeedFijo;
                Archivo archivoDatosFeedVariable;
                Archivo archivoFeedIndice;
                TCId currentId;
                string directorioInicial;

                void ActualizarGeneradorId();
                
        protected:
                //Obtiene el siguiente ID.
                TCId generateFeedID();

        public:
                FeedManager();
                virtual ~FeedManager();

                //Inicializa el secuenciador de Id y abre los archivos.
                bool InicializarManager(string DirectorioInicial);

                //Recibe informacion de un Feed y lo agrega. (toma URL y Fecha)
                //retorna el ID generado.
                bool AgregarFeed(Feed &nuevoFeed, TCId &idFeed);

                //Elimina un Feed dada su posicion global en el indice (primera posicion = 0)
                bool EliminarFeed(unsigned int posicionGlobal);

                bool ActualizarFechaFeed(unsigned int posicionGlobal);

                //Consulta los Feeds activos devuelve un list de la clase FeedItemConsulta
                ListaConsultaFeed ConsultarFeed();

                //Deja solo los feeds que tienen el bit de estado en true.
                void ReorganizarArchivos();

};


#endif


